import express from "express";
import {authenticateToken} from "../../config/auth.js";
import roleMenuServices from "../../services/user/roleMenuServices.js";
import ResponseHandler from "../../utils/responseHandler.js";
import asyncHandler from "../../utils/asyncHandler.js"; // 引入 asyncHandler

const roleMenuRouter = express.Router();

/**
 * @description 创建角色菜单关系
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleMenuRouter.post('/createRoleMenu',
    authenticateToken,
    asyncHandler(async (req, res) => { // 使用 asyncHandler
        const errorMessage = await roleMenuServices.createRoleMenu(req.body);
        if (errorMessage) return await ResponseHandler.responseResult(res, null, errorMessage); // 返回错误信息

        return await ResponseHandler.responseResult(res, null, '角色菜单关系创建成功'); // 返回成功信息
    })
);

/**
 * @description 获取指定角色的菜单关系
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleMenuRouter.get('/getRoleMenuByRoleId',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const roleId = req.query.roleId || req.user.role_id; // 从查询参数或用户信息中获取角色 ID
        if (!roleId) return await ResponseHandler.responseResult(res, null, '角色 ID 不能为空'); // 返回错误信息

        const roleMenus = await roleMenuServices.getRoleMenuByRoleId(roleId);
        return await ResponseHandler.responseResult(res, roleMenus, '获取角色菜单关系成功'); // 返回成功信息
    })
);

/**
 * @description 删除角色菜单关系
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleMenuRouter.post('/deleteRoleMenu',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const result = await roleMenuServices.deleteRoleMenu(req.body.roleMenuId);
        if (result) return await ResponseHandler.responseResult(res, null, '删除失败'); // 返回错误信息

        return await ResponseHandler.responseResult(res, null, '删除角色菜单关系成功'); // 返回成功信息
    })
);

/**
 * @description 查询所有用户、角色及菜单关联信息
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleMenuRouter.get('/getAllUserRoleRoleMenu',
    authenticateToken, // 需要用户认证
    asyncHandler(async (req, res) => {
        // 从服务层获取数据
        const userRoleMenuData = await roleMenuServices.getAllUserRoleRoleMenu(req.user.id);

        // 返回结果
        return await ResponseHandler.responseResult(res, userRoleMenuData, '获取用户角色菜单关联信息成功');
    })
);

export default roleMenuRouter;
